Ingress?Ingress 負責給 Service 提供外部訪問的 URL、SSL 驗證、負載平衡、HTTP路由過濾等行為,如果還不了解他你可以先暫時將 Ingress 想成 Nginx 或 Apache,原本在Nginx 或 Apache上設定的規則都搬移到 Ingress 執行,允許只透過某個 URL 可以進到服務,且碰到某些 Route 能夠 Proxy Pass 到指定服務,當然在這過程可能會經過 SSL 驗證或者 Rewrite 規則。
Service 與 Ingress 比較筆者解釋一下為什麼透過 Ingress 進入服務,會比透過 Service進入服務來的好,請先看看下方流程圖:

上方流程圖中,可以看到使用者正在透過瀏覽器瀏覽網頁,且有三個 URL 分別對應到三個服務,每個服務都有特殊 Port,所以如果只有使用 Service 管理服務,那麼使用者就必需管理 Port 跟 URL ,當服務越來越多需要管理的 Port 也會越來越多,另外比較嚴重的問題是,每次 Service 被建立時,都會自動產生一組對外 IP,若下次再重新建立 IP 就不會在相同了,這時 URL 找不到對應的 IP,服務就會發生異常。

接著在瀏覽器與 Service 中間插入了 Ingress, Ingress 只需要負責檢查網址是否有在規則中,以及是否有需要進行 SSL 驗證,好處是只需要對外開放一個 Port ,其餘的設定可以藉由 Ingress 控制使用者送來的請求應該被導向哪個 Service 服務。
Ingress 範例注意:
在使用 Ingress 之前,一定需要先運行 Ingress Controller,筆者本身習慣使用 Nginx 作為平常使用的 Ingress Controller
Ingress Controller 扮演著與 K8S API 溝通的腳色,並隨時注意 Ingress 規則是否有變化、如果有變化則自行更新規則。
範例:
zxc.com URL ,會透過 Ingress 導向 web01-service 服務。abcabc.com URL ,會透過 Ingress 導向 web02-service 服務。apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: zxc.com
    http:
      paths:
      - path: /
        backend:
          serviceName: web01-service
          servicePort: 80
  - host: abcabc.com
    http:
      paths:
      - path: /
        backend:
          serviceName: web02-service
          servicePort: 80
以上是今天 ingress 內容,那今天就先這樣啦。